package 面试经典150题.矩阵;

/**
 * @author tmh
 * @date 2024/7/5 20:12
 * @description 自外向内一共有不超过 n/2 层（单个中心元素不算一层）矩形框。
 * 对于第 times 层矩形框，其框边长 len=nums−(times∗2)，
 * 将其顺时针分为 4 份 len−1 的边，对四条边进行元素的循环交换即可。
 * <p>
 * 作者：肖邦鹏
 * 链接：https://leetcode.cn/problems/rotate-image/solutions/4192/zi-wai-xiang-nei-shun-shi-zhen-xun-huan-jiao-huan-/
 * 来源：力扣（LeetCode）
 * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 */
public class T48旋转图像 {
    public void rotate(int[][] matrix) {
        if (matrix.length == 0 || matrix.length != matrix[0].length) {
            return;
        }
        int nums = matrix.length;
        int times = 0;
        while (times <= (nums >> 1)) {
            int len = nums - (times << 1);
            for (int i = 0; i < len - 1; i++) {
                //暂存左上角的元素
                int temp = matrix[times][times+i];
                //左下角的元素移动到左上
                matrix[times][times+i]=matrix[times+len-1-i][times];
                //右下角的位置移动到左下角
                matrix[times+len-i-1][times]=matrix[times+len-1][times+len-i-1];
                //右上角的位置移动到右下角
                matrix[times+len-1][times+len-i-1]=matrix[times+i][times+len-1];
                //右上角的位置移动到左上角
                matrix[times+i][times+len-1]=temp;
            }
            times++;
        }
    }
}
